//
// Created by libtity on 24-5-25.
//

#ifndef WEB_SERVE_H
#define WEB_SERVE_H

#include "bits/stdc++.h"
#include <arpa/inet.h>
#include <fcntl.h>
#include <iostream>
#include <netinet/in.h>
#include <string>
#include <sys/epoll.h>
#include <unistd.h>
#include <unordered_map>
#include <vector>

#define MAX_EVENTS 10
#define PORT       6666

using namespace std;

// 服务端类
class Server
{
    enum State_t
    {
        LIANJIE,
        ZHUCE,
        ZHUCE2,
        DENGLU,
        DENGLU2,
        LIAOTIAN,
        LIAOTIAN2,
        LIAOTIAN3,
        EXIT
    };

    // 用户信息结构体
    struct UserInfo
    {
        std::string username;
        std::string password;
        std::string targetname;
        State_t     state;
    };

    struct UserData
    {
        string password;
        bool   online;
        int    sockfd;
    };

private:
    int                                  listen_socket;   // 监听套接字
    int                                  epoll_fd;        // epoll 实例的文件描述符
    std::unordered_map<int, UserInfo>    users;           // 用户信息哈希表
    std::vector<epoll_event>             events;          // 事件数组
    std::unordered_map<string, UserData> user_reg;        // 存储已经注册了的用户

public:
    Server();

    // 运行服务端
    void run();

private:
    // 接受新连接
    void acceptConnection();

    // 接收消息
    void receiveMessage(int sockfd);

    // 处理客户端发送的消息
    void handleMessage(int sockfd, const std::string& message);

    // 注册新用户
    void registerUser(int sockfd)
    {
        // 实现注册功能...
        std::string registerMessage = "Register functionality not implemented yet.\n";
        send(sockfd, registerMessage.c_str(), registerMessage.size(), 0);
    }

    // 登录已有用户
    void loginUser(int sockfd)
    {
        // 实现登录功能...
        std::string loginMessage = "Login functionality not implemented yet.\n";
        send(sockfd, loginMessage.c_str(), loginMessage.size(), 0);
    }
};

#endif   // WEB_SERVE_H
